#include <iostream>
#include <opencv2/opencv.hpp>

using namespace cv;

int main() {
    char *fn = "/Volumes/D/study/machinelearning/opencv/testpic/lenacolor.bmp";
    Mat image = imread(fn);
    imshow("Hello World!", image);
//        waitKey(0);

    //高斯平滑处理
    Mat imageGauss, image1, image2, gray, gray1, hsv, hsvChannel[3], rgbChannel[3];
    //最后一个宽度设置0，自动选取
//    GaussianBlur(image,imageGauss,Size(5,5),0);
//    imshow("Source img.",image);
//    imshow("gauss image.",imageGauss);
//    waitKey();

//改变图像大小为原来的一般
//    resize(image,image1,Size(image.cols/2,image.rows/2));
    //再将图片缩小一半
//    pyrDown(image1,image2);
//    imshow("Source image.",image);
//    imshow("harf image",image1);
//    imshow("quarter image.",image2);
//    waitKey();

//颜色空间转化，阀值化
//彩色转灰度并且阀值化
    //COLOR_BGR2GRAY 代表 从BGR三通道图像向灰度图像转换
//    cvtColor(image,gray,COLOR_BGR2GRAY);
    //从gray到二值化图像gray1 ，  大于120所有像素值都设置成0xff白色
//    threshold(gray,gray1,120,0xff,THRESH_BINARY);
//    imshow("Source image.",image);
//    imshow("gray image.",gray);
//    imshow("threshold image.",gray1);
//    waitKey();

//RGB分量
    split(image, rgbChannel);
//0是色度
    imshow("b .", rgbChannel[0]);
    //1是饱和度
    imshow("g.", rgbChannel[1]);
    //2是亮度
    imshow("r.", rgbChannel[2]);


//进行通道分离 蓝色排在前边叫做bgr和rgb差不多
    cvtColor(image, hsv, COLOR_BGR2HSV);
    split(hsv, hsvChannel);
    //0是色度
    imshow("Hue .", hsvChannel[0]);
    //1是饱和度
    imshow("saturation.", hsvChannel[1]);
    //2是亮度
    imshow("value.", hsvChannel[2]);
    waitKey();

//    std::cout << "Hello, World!" << std::endl;
//    return 0;
}
